#include <stdio.h>


// //输出箭头图形
// int main()
// {
//     int n = 0;
//     int i = 0;
//     int j = 0;
//     while(scanf("%d",&n) == 1)
//     {
//         for(i = 0;i < n;i++)
//         {
//             for(j = 0;j < n - i;j++)
//             {
//                 printf("  ");
//             }
//             for(j = 0;j <= i;j++)
//             {
//                 printf("*");
//             }
//             printf("\n");
//         }
//         for(i = 0;i <= n;i++)
//         {
//             for(j = 0;j < i;j++)
//             {
//                 printf("  ");
//             }
//             for(j = 0;j < n - i + 1;j++)
//             {
//                 printf("*");
//             }
//             printf("\n");
//         }
//     }
//     return 0;
// }




// //求七个数的平均数，去掉一个最高分，去掉一个最低分
// int main()
// {
//     int score = 0;
//     int sum = 0;
//     int max = 0;
//     int min = 100;
//     int n = 0;
//     while(scanf("%d",&score) == 1)
//     {
//         n++;
//         if(score>max)
//             max = score;
//         if(score < min)
//             min = score;
//         sum += score;
//         if(n ==7)
//         {
//             printf("%.2lf",(sum-max-min)/5.0);
//             sum = 0;
//             n = 0;
//             max = 0;
//             min = 100;
//         }
//     }
//     return 0;
// }




// //联合体
// int main()
// {
//     union
//     {
//         short k;
//         char i[2];
//     }*s,a;
//     s = &a;
//     s->i[0] = 0x39;
//     s->i[1] = 0x38;
//     printf("%x\n",a.k);//结果为 3839 小端存储
//     return 0;
// }



// //一组数字中只有两个数字出现了一次，其余数字都出现了两次，找出这两个数字
// int main()
// {
//     char arr[] = {1,2,3,4,5,1,2,3,4,6};
//     int sz = sizeof(arr)/sizeof(arr[0]);
//     int i = 0;
//     int j = 0;
//     for(i = 0;i < sz;i++)
//     {
//         int flag = 0;
//         for(j = 0;j < sz;j++)
//         {
//             if(arr[i] == arr[j])
//                 flag++;
//         }
//         if(flag == 1)
//         {
//             printf("%d ",arr[i]);
//         }
//     }
//     return 0;
// }//自己写的是遍历 时间复杂度太高
// //参考之前的 还有一个数出现一次 其他出现两次 所有数异或在一起即可
// //例如1^2^3^4^5^4^3^2^1结果为5



// int main()
// {
//     printf("%d\n",1^2^3^4^5^4^3^2^1);
//     return 0;
// }



// void find_single_dog(int arr[],int sz,int* p1,int* p2)
// {
//     int i = 0;
//     int ret = 0;
//     for(i = 0;i < sz;i++)
//     {
//         ret ^= arr[i];
//     }
//     int pos = 0;
//     for(pos;pos < 32;pos++)
//     {
//         if(((ret >> pos) & 1) == 1)//从0开始的 0即代表对比最低位
//         {
//             break;
//         }
//     }
//     for(i = 0;i < sz;i++)
//     {
//         if(((arr[i] >> pos) & 1) == 1)
//         {
//             *p1 ^= arr[i];
//         }
//         if(((arr[i] >> pos) & 1) == 0)
//         {
//             *p2 ^= arr[i];
//         }
//     }
// }
// int main()
// {
//     int arr[] = {1,2,3,4,5,1,2,3,4,6};
//     int sz = sizeof(arr)/sizeof(arr[0]);
//     int dog1 = 0;
//     int dog2 = 0;
//     find_single_dog(arr,sz,&dog1,&dog2);
//     printf("%d %d\n",dog1,dog2);
//     return 0;
// }





// //模拟实现atoi
// #include <stdlib.h>
// #include <ctype.h>
// int my_atoi(const char* str)
// {
//     // 若为空指针 返回0
//     if(str == NULL)
//         return 0;
//     // 若为空字符串，返回0
//     if(*str == '\0')
//         return 0;
//     // 自动跳过前置的空格
//     while(isspace(*str))
//     {
//         str++;
//     }
//     // 通过标志位来决定结果的正负
//     int flag = 1;
//     if(*str == '-')
//     {
//         flag = -1;
//         str++;
//     }
//     long long ret = 0;
//     while(*str != '\0')
//     {
//         if(isdigit(*str))
//         {
//             ret = ret * 10 + (*str - '0');
//         }
//         else   
//             break;
//         str++;
//     }
//     ret = ret * flag;
//     if(ret > INT_MAX)
//         return INT_MAX;
//     else if(ret < INT_MIN)
//         return INT_MIN;
//     else
//         return (int)ret;
// }
// int main()
// {
//     char arr[] = "-6666666";
//     int ret1 = atoi(arr);
//     int ret2 = my_atoi(arr);
//     printf("%d\n",ret1);
//     printf("%d\n",ret2);
//     printf("%s\n",arr);
//     return 0;
// }



// 写一个宏，实现一个数的奇偶位互换
// 自己写一个函数形式
void swap(int* pa)
{
    int temp = ((*pa&0xaaaaaaaa)>>1)+((*pa&0x55555555)<<1);
    *pa = temp;
}
#define SWAP(n) (n=((n&0xaaaaaaaa)>>1)+((n&0x55555555)<<1))
int main()
{
    int a = 0;
    scanf("%d",&a);
    // swap(&a);
    SWAP(a);
    printf("%d\n",a);
    return 0;
}